
<html> 
<head><title>Calculator</title></head> 
<body> 
 
<h1>Calculator</h1> 
(Ver 1.0 4/10/2012 by Xiao Huang & Youran Weng)<br /> 
Type an expression in the following box (e.g., 10.5+20*3/25).
<p> 
<form method="GET"> 
<input type="text" name="expr"><input type="submit" value="Calculate"> 
</form> 
</p> 
<ul> 
<li>Only numbers and +,-,* and / operators are allowed in the expression.
<li>The evaluation follows the standard operator precedence.
<li>The calculator does not support parentheses.
<li>The calculator handles invalid input "gracefully". It does not output PHP error messages.
</ul> 
Here are some(but not limit to) reasonable test cases:
<ol> 
  <li> A basic arithmetic operation:  3+4*5=23 </li> 
  <li> An expression with floating point or negative sign : -3.2+2*4-1/3 = 4.46666666667, 3+-2.1*2 = -1.2 </li> 
  <li> Some typos inside operation (e.g. alphabetic letter): Invalid input expression 2d4+1 </li> 
</ol> 

<?php
	if(isset($_GET["expr"]) ? $_GET["expr"] : null)
	{
        	$subject = $_GET["expr"];

	
	if(  preg_match("/[^0-9\+\-\*\/\s\.]/",$subject)  // non digit or operator
	  || preg_match("/(\*|\/)\s*\*/",$subject)    // */ or **
	  || preg_match("/(\*|\/)\s*\//",$subject)    // */ or //
	  || preg_match("/-\s*-/",$subject)         // --
 	  || preg_match("/\+\s*\+/",$subject)       // ++
          || preg_match("/[^0-9]$/",$subject)       // none digit ending
	  || preg_match("/\/\s*0/",$subject)        // /0
	   )
	{
	    print '<h1>'."Result".'</h1>';
            print ("Invalid input expression ".$subject);
	}
  
        else{
                $return=eval("\$answer= $subject;") ;


                print '<h1>'."Result".'</h1>';
                print($subject." = ".$answer);
            }
        
	}
?>
</body> 
</html> 
